package com.cskaoyan.javase.oop2._1extends._0introduction._1new;

/**
 * 继承的引入
 * 根据我们之前学过的知识，完成如下练习：
 * 分别定义一个表示人和学生的类：
 * 人类：有姓名属性，以及吃饭这个行为
 * 教师类：有姓名，教师号两个属性，同时有吃饭，教学两种行为
 * 学生类：有姓名，学号两个属性，同时有吃饭，学习两种行为
 *
 * 很明显，像成员变量name，方法eat等都是被重复定义的成员。既然有重复，那就想复用它们，现在的需求是：复用类的成员。怎么做呢？
 *
 * Java中对代码的直接复用依赖于某一个方法，而想要复用类的成员，就必须使用Java中的继承语法。
 * 继承就是对类的成员的复用.
 *
 * 现在使用继承改写以上案例,复用成员
 * 继承的语法:
 * Java在定义一个类时，可以显式地，直接让它继承另一个类，这就是Java的继承机制
 * 其语法是：
 * [访问权限修饰符] class 类名 extends 被继承的类/已经存在的某个类{}
 * 解释:
 *      1.继承使用extends关键字,这个单词是"扩展"的意思
 *      2.被继承的类/已经存在的某个类,在Java称之为"父类(super class)"
 *          继承父类的类,被称之为子类(subclass)
 *      3.子类通过继承的语法,子类会继承父类中的所有成员
 *          注: 所有成员指的是普通成员(方法/变量)
 *          暂时不考虑静态成员的继承,以及构造器
 *      4.继承的本质是成员复用,所以需要被复用成员的类应该是父类
 *      5.子类在继承父类成员的基础上,还可以定义自身独有成员,这就是"extends"关键字,扩展的涵义
 *      子类继承父类,其实是扩展了父类
 *
 * @since 14:39
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 测试子类继承父类成员
        Student s = new Student();
        System.out.println(s.name);
        s.eat();

        new Teacher().eat();
    }
}

// 父类
class Person {
    String name;

    public void eat() {
        System.out.println("我今天中午吃的是🍚!");
    }
}

class Student extends Person {
    int stuId;
    public void study() {
        System.out.println("吃饱了就学习!");
    }
}

class Teacher extends Person{
    int staffId;

    public void teach() {
        System.out.println("上课真有意思!");
    }
}